Part Number Hot Search : 
D10NC B1720 ATF1508 128M16 CKJGAAAA 2SC4382 TI090111 P6SMB6
Product Description
Full Text Search
 

To Download AN1048 Datasheet File

  If you can't view the Datasheet, Please click here to try to view without PDF Reader .  
 
 


  Datasheet File OCR Text:
  AN1048/1098 1/20 application note st7 software lcd driver by microcontroller division application team 1 introduction this note describes a technique for driving a liquid crystal display (lcd) with any standard st72 microcontroller (mcu) i.e without any specific on-chip lcd driver hardware. this tech- nique offers a solution for applications which require a small display at low cost together with the versatile capabilities of the standard st72 mcu. the section 2 of this note describes the typical waveforms required to drive an lcd with a multiplexing rate of 1 or 2 (duplex). the sections 3 and 4 present two solutions based on standard st72 mcus directly driving an lcd. both solutions can be implemented with any st72xx mcu as they only require the standard i/o ports and one timer (first solution) which are standard features of the st72 mcus. the first solution uses one timer, more precisely its output compare feature to generate the lcd timing. the second solution targets low power applications, as the st7 goes into halt mode between 2 i/o refreshes. an external rc circuit is used to generate the timing, waking up the st7 (external i/o interrupt). in both cases the program size (132 bytes / 212 bytes), the cpu load required for controlling lcd, and the number of external components are minimized. as a result many additional tasks can be added to the application program. 1
2/20 st7 software lcd driver 2 lcd requirements with a zero root mean square (rms. i.e.: ) voltage applied to it, an lcd is practically transparent. the lcd contrast, which makes the segments turn dark or opaque and thus "on", is caused by the difference between the applied rms. lcd voltage applied and the lcd threshold voltage, specific to each lcd type. the applied lcd voltage must alternate to give a zero dc value in order to ensure a long lcd life time. the higher the multiplexing rates , the lower the contrast. the signal period has also to be short enough to avoid visible flickering on the display. the lcd voltage for each segment is equal to the difference between the s and com volt- ages (see figure 1). figure 1. equivalent electrical schematic of an lcd segment notes: the dc value should never be more than 100mv. otherwise the life time can be shortened. the frequency range is 30 - 2000hz typically. if it is less, it flickers; if it is more, the consumption grows. 2.1 one backplane lcd drive each lcd segment is connected to an i/o "segment" and to one backplane common to all the segments. a display using s segments is driven with s+1 mcu output lines. the backplane is driven with a "com" signal controlled between 0 and vdd with a duty cycle of 50%. when switching a segment "on", a signal with opposite polarity to "com" is sent to the corre- sponding "segment" pin. when the non-inverted signal "com" is sent to the "segment" pin, the segment is "off". using an mcu, the i/o operates in output mode either at logic 0 or 1. mean signal 2 () c rs s com 2
3/20 st7 software lcd driver figure 2. lcd signals for direct drive com s1=com-s -vdd +vdd s s1=com-s s o f f o n +vdd +vdd +vdd +vdd
4/20 st7 software lcd driver 2.2 duplexed lcd drive in a duplexed drive, two backplanes are used instead of one. each lcd pin is connected to two lcd segments, each one connected on the other side to one of the two backplanes. thus, only (s/2)+2 mcu pins are necessary to drive an lcd with s segments. three different voltage levels have to be generated on the backplanes : 0, v dd /2 and v dd . the segment voltage levels are 0 and vdd only. the lcd segment is inactive if the rms. voltage is below the lcd threshold voltage and is active if the lcd rms. voltage is above the threshold voltage. figure 4 shows typical backplane, segment and lcd waveforms. the in- termediate voltage v dd /2 is only required for the backplane voltages. the st72 i/o pins se- lected as backplanes are set by software to output mode for 0 or vdd levels and to high im- pedance input mode for v dd /2. this vdd/2 voltage is defined by two equal valued resistors ex- ternally connected to the i/o pin. by using an mcu with flexible i/o pin configuration such as the st72251, a duplexed lcd drive can be implemented with only 4 additional resistors. figure 3. basic lcd segment connection in duplexed mode s1 s2 com1 com2 s3 s11 s12
5/20 st7 software lcd driver figure 4. lcd signals for duplexed mode (used in the st7 example) the segment rms. signal is in cases 1 & 3 for segment 1 (3 & 4 for segment 2) and otherwise. com1 s11=com1-s1 +vdd s12=com2-s1 s1 +vdd +vdd com2 case1 case2 case3 case4 +vdd/2 +vdd/2 -vdd +vdd +vdd/2 -vdd/2 -vdd +vdd +vdd/2 -vdd/2 segment1 segment2 off on on off off off on on vdd 8 ---------- - 5 () vdd 8 ----------------------
6/20 st7 software lcd driver 3 example of a duplexed lcd with the st72251 the following example describes a drive for duplexed mode (2com) lcd with the st72251. the only external components needed for driving the lcd are 4 resistors. the st72251 has 22 i/o pins (only 8 are configurable as open drain outputs) and can there- fore drive an lcd up to a 32 segments and 2 backplanes. in this example only pa7..pa0 are used for the segment signals. pb7 and pb6 are used to generate both com1&2 signals, this driver is able to drive a 16 segment lcd. nevertheless this program can be easily changed to sopport a maximum of 32 segments. the lcd timing is generated by the timera output compare interrupt. the lcd driver consists of 2 initialization routines, the timera interrupt routine "tima_rt" (main part of the driver), and 3 variables: "lcdcr", "seg1" and "seg2". to activate the lcd, two initialization routines have to be called: the port initialization routine "port_init" and the timera initialization routine "timer_config". once these routines are called the st7 will get the timer output compare 1 & 2 interrupts. according to which output compare and to the lcd control register "lcdcr" the com1&2 signals will be changed (0, vdd/2, or vdd) so that the timing described in figure 4 will be generated. for the segment outputs the variables "seg1" and "seg2" are also needed. seg1 and seg2 enable the user program to switch the segment on or off: if the bit n of seg1 is set the driver will turn the nth segment connected to the com1 backplane. figure 5. st72251 duplexed lcd example - hardware segments c o m -reset oscin oscout pb7 pb6 pb5 pb4 pb3 pb2 pb1 pb0 pc5 pc4 pc3 vdd vss test pa0 pa1 pa2 pa3 pa4 pa5 pa6 pa7 pc0 pc1 pc2 st72251 7 470k 470k 470k 470k 8mhz
7/20 st7 software lcd driver 3.1 listing 1. st72251 example - software the code given below is for guidance only. st7/ ;************************************************************************ ; title: lcd.asm ; author: microcontroller application team ; description: software driver for a 2 backplane lcd display. ; use one timer to generate the appropriate lcd timing ; ;************************************************************************ title "lcd.asm" title "lcd.asm" motorola .nolist #include "st72251.inc" ; include st72251 registers and memory mapping file #include "variable.inc" ; include general variable file .list ;************************************************************************ ;*********************************************************************** ; variables, constants defined and referenced locally ; you can define your own values for a local reference here ;*********************************************************************** ;************************************************************************ ;************************************************************************ ; public routines (defined here) ;************************************************************************ ; routines ; we could have used a dot in front of the label's name to declare the routine ; as visible by others modules in the project. ;************************************************************************ ; extern routines (defined elsewhere) ; ; the extern directive will be seen by the linker as a call ; instruction to another routine written in another file
8/20 st7 software lcd driver ;************************************************************************ ; routines ;********************************************************** ;********************************************************** ; program code ;********************************************************** words ; define subsequent addresses as words ; meaning that all instructions are located ; in the address field after 0ffh in the st72251 ; memory mapping segment 'rom' ;***************************************************************** ;***************************************************************** ; timera driver - timera used for lcd timing generation: generate ; an output compare interrupt every 2 ms. ; ; description: ; - pb7 dedicated to com1, and pb6 to com2. they provide 3 levels using 2 external pull up ; and pull down resistors for each pin, and the open drain output feature: 0, vdd/ 2, and vdd ; - for segment signals which are normal digital signal (0 or 1) pa[0..7] are used as ouput ; push pull ; - the lcd timing is divided in 4 "segments": - oc1_1 & oc1_2: following oc1 it ; - oc2_1 & oc2_2: following oc2 it ; ; timing (segi linked to comi): cf figure 6 ; ;***************************************************************** .tima_rt btjt tasr,#6,oc1 clr taclr ; reset timer counter by any write to the lsb ld a,taoc2lr ; access ocr2 after reading tsr to clear the it request cpl padr ; note (1): segment signal toggles every oc2 it ld x,lcdcr tnz x ; test lcdcr(0 or 1) = 1 + lcdcr jrne oc2_2 ;### actions for oc2_1 segment (1)### ld a,pbdr ; in oc2_1, com1 = vdd and com2 = vdd/2 or a,#$80 ; pb7 is already an output push pull, ld pbdr,a ; pb6 is already an output open drain ; so only need to set bit 7 of pbdr
9/20 st7 software lcd driver ;### end of actions for oc2_1 segment ### jrt out_oc2 ;### actions for oc2_2 segment (1)### oc2_2 ld a,pbdr ; in oc2_1, com1 = vdd and com2 = vdd/2 or a,#$40 ; pb7 is already an output push pull, ld pbdr,a ; pb6 is already an output open drain ;### end of actions for oc2_2 segment ### out_oc2 ld a,lcdcr xor a,#1 ; toggles lcdcr ld lcdcr,a jrt out oc1 ld a,taoc1lr ; access ocr1 after reading tsr to clear the it request ld x,lcdcr ld a,(seg1,x) ; in this segment oc1_i, the segment output value is the ld padr,a ; one of the segment i: 1 if segment is on. otherwise 0. tnz x ; test lcdcr(0 or 1) = 1 + lcdcr jrne oc1_2 ;### actions for oc1_1 segment ### ld a,pbdr and a,#$7f ld pbdr,a ld a,pbor ; in oc1_1, com1 = 0 and com2 = vdd/2 or a,#$80 ; so pb7 is an output push pull, and a,#$bf ; and pb6 an output open drain ld pbor,a ;### end of actions for oc1_1 segment ### jrt out ;### actions for oc1_2 segment ### oc1_2 ld a,pbdr and a,#$bf ld pbdr,a ld a,pbor ; in oc1_2, com1 = vdd/2 and com2 = 0 and a,#$7f ; so pb7 is an output open drain, or a,#$40 ; and pb6 an output push pull ld pbor,a ;### end of actions for oc1_2 segment ### out iret ;***************************************************************** ; timera initialisation ;***************************************************************** .timer_config clr a ld lcdcr,a ; initialize lcd software control register ld a,#$03 ld taoc1hr,a ; output compare mode chosen.
10/20 st7 software lcd driver ld a,#$e6 ld taoc1lr,a ; ouput compare 1 it when the counter reaches 270dh ld a,#$07 ld taoc2hr,a ; ouput compare 2 it when the counter reaches 4e1d ld a,#$ce ld taoc2lr,a ld a,#$40 ld tacr1,a ; timer output compare interrupt enabled ld a,#$08 ld tacr2,a ; timer counter clock is cpu clk/8 ret ;***************************************************************** ; port initialisation for lcd pins ;***************************************************************** ; caution!! this subroutine has to be runned just before ;the lcd program is run, ; because lcd pins must never be connected ; to steady levels. as long as lcd is not used, leave ; the st7 pins in reset state (input) so that the lcd ; is not supplied. you can configure them in any other ; state except in ouput push pull! .port_init ld a,#$ff ; configure the whole porta in output push-pull ld paddr,a ; they will be dedicated to the segment outputs ld paor,a ld a,#$c0 ; configure pb6 & pb7 as output open drain ld pbddr,a clr pbor ; they will be dedicated to the backplane outputs ret end
11/20 st7 software lcd driver figure 6. lcd timing and timer interrupts vdd 0 vdd 0 seg2 off seg1 off case 3 vdd 0 seg2 on seg1 off case 1 interrupt oc1 oc1 oc1 oc2 oc2 oc2 segment oc1_1 oc1_1 oc2_1 oc1_2 oc2_2 com1 com2 vdd vdd/2 0 vdd vdd/2 0 vdd 0 seg2 on seg1 on case 2 seg2 off seg1 on case 4
12/20 st7 software lcd driver 4 example of duplexed low consumption lcd with the st72251 the following example describes the drive for a duplexed mode (2com) lcd with the st72251. moreover this example targets low powered applications, as the st7 goes in halt mode between two lcd refreshes. the only external components needed for driving the lcd are 4 resistors for the 3 level com signals and 1 resistor and capacitor for the wake-up mech- anism. the st72251 has 22 i/o pins (only 8 are configurable as open drain outputs) and can there- fore drive an lcd up to a 32 segments and 2 backplanes. in this example only pa7..pa0 are used for the segment signals. pb7 and pb6 are used to generate both com1&2 signals, this driver is able to drive a 16 segment lcd. nevertheless this program can be easily changed to support a maximum of 32 segments. the lcd timing generation is not done using the timera because to reduce power consump- tion to a very low level the st7 is put in halt mode between 2 lcd pin refreshes . to wake the st7 up after it has been put in halt mode, an external interrupt has to be generated. this is done by an external rc circuitry. while the program refreshes the lcd pins, the capacitor is charged by configuring the pa5 pin as output push pull with a high level. before going in halt mode the pa5 pin is configured as input pull up with interrupt. as a result the capacitor dis- charges until the pa5 pin reaches the low level specification (0.3. vdd) and the st7 is woken up. the lcd pins can be refreshed again before the st7 is put in halt mode once more.... the lcd driver consists of 2 initialization routines (the port initialization routine "port_init" and the lcd start routine "start_lcd"), the portb&c interrupt service routine (main part of the driver) and 3 variables: "lcdcr", "seg1" and "seg2". to activate the lcd two initialization routines have to be called: the port initialization routine "port_init" and "start_lcd" which will cause the first pa5 external interrupt. once these routines are called the st7 will get the pa5 external in- terrupt, which will generate the correct lcd signals, according to "seg1" and "seg2" indicating which segment has to be turned on or off. after the interrupt it is up to the user program to put the st7 in halt mode. you can therefore add your own program to this one. figure 7. st72251 example - hardware segments c o m -reset oscin oscout pb7 pb6 pb5 pb4 pb3 pb2 pb1 pb0 pc5 pc4 pc3 vdd vss test pa0 pa1 pa2 pa3 pa4 pa5 pa6 pa7 pc0 pc1 pc2 st72251 7 470k 470k 470k 470k 8mhz 4,7k 1uf
13/20 st7 software lcd driver 4.1 listing 2. st72251 example - software the code given below is for guidance only. st7/ ;************************************************************************ ; title: lcd.asm ; author: microcontroller application team ; description: software driver for a 2 backplane lcd display ; this lcd driver version is designed for low power ; applications: the st7 can go in halt mode between two ; lcd refreshes: an external rc circuit generates an i/o ; interrupt, which wakes up the st7 ; ;************************************************************************ title "lcd.asm" motorola .nolist #include "st72251.inc" ; include st7225 registers and memory mapping file #include "variable.inc" ; include general variable file .list ;************************************************************************ ;*********************************************************************** ; variables, constants defined and referenced locally ; you can define your own values for a local reference here ;*********************************************************************** ;************************************************************************ ; public routines (defined here) ;************************************************************************ ; routines ; we could have used a dot in front of the label's name to declare the routine ; as visible by others modules in the project. ;************************************************************************ ; extern routines (defined elsewhere) ; ; the extern directive will be seen by the linker as a call ; instruction to another routine written in another file
14/20 st7 software lcd driver ;************************************************************************ ; routines ;********************************************************** ; program code ;********************************************************** words segment 'rom' ;***************************************************************** ; lcd driver - several i/o pins are used to emulate segment and common lcd signals. ;between 2 lcd refreshes (pins level update) the st7 can go in halt mode in order to ;reduce power consumption to a very low level. ;one st7 pin is used to generate an external interrupt for every lcd refresh. ;to get this external interrupt an rc circuit is connected to this pin. when the ;the st7 is in halt mode the pin is configured as an input pull-up with interrupt. ; as a result of the capacitor discharge the pin goes low until it reaches ; the low level specification. an external interrupt is then generated, that wakes ; up the st7. first the rc circuit is charged again configuring the pin as output ; push push with a high level. then the lcd segment and common pins are refreshed ; before setting the st7 in halt mode again. and so on ... ; ; calibrating the rc circuit: cf figure 8 ; ; if you want to choose different values, these are the key points: ; - if you choose a different c value, take care to update the wait ; loop in the interrupt routine so that the capacitor is fully charged ; when leaving the interrupt. 100us is needed for these values. ; - for r, choose a far smaller value than the internal resistor so that ; the unprecise internal resistor value does not have a big influence ; in the lcd frequency. ; - choose r so that the discharged value r/(r+rint).vcc is lower than ; the interrupt voltage (0.3 vdd). then choose c to reach the lcd ; frequency specification ; ; description: ; - pb7 is dedicated to com1, and pb6 to com2. they provide 3 levels thanks to an ;external pull up ; and pull down resistor for each pin, and the open drain output feature: 0, vdd/2, ;and vdd ; - for segment signals which are normal digital signals (0 or 1) pa[0..7] are used ;as output ; push pull
15/20 st7 software lcd driver ; - one lcd period is made of 4 time subdivisions: subdiv1, subdiv2, subdiv3, ;subdiv4. to know ; which subdivision is the next one at the next st7 i/o interrupt, the 2 lcd ;control register lcdcr ;low bits are used: subdivx = lcdcr[1..0] + 1 ; ; timing (segi linked to comi): cf figure 9 ; ;***************************************************************** ;***********i/o interrupt routine********************************* .ext1_rt btjf pbdr,#5,begin_lcd ; test if the i/o interrupt source is lcd pb5 pin jp no_lcd begin_lcd ld a,pbdr ;|\ or a,#$20 ;| ld pbdr,a ;| ld a,pbor and a,#$df ld pbor,a ; configure pb5 as an ouput push pull in high state ld a,pbddr or a,#$20 ld pbddr,a ld a,pbor ;| or a,#$20 ;| ld pbor,a ;|/ ; ###############user program computed in the wake-up i/o interrupt######## ld y,#$3f ;|\ ld cpt1,y ; wait loop so that the capacitor can be fully wait1 dec cpt1 ; charged again jrne wait1 ;|/ ld a,lcdcr and a,#$01 tnz a jreq oc1 cpl padr ; note (1): segment signal toggles every oc2 it ld a,lcdcr and a,#$02 tnz a jrne oc2_2 ;### actions for oc2_1 segment (1)### ld a,pbdr ; in oc2_1, com1 = vdd and com2 = vdd/2
16/20 st7 software lcd driver or a,#$80 ; pb7 is already an output push pull, ld pbdr,a ; pb6 is already an output open drain ; so only nead to set bit 7 of pbdr ;### end of actions for oc2_1 segment ### jrt out ;### actions for oc2_2 segment (1)### oc2_2 ld a,pbdr ; in oc2_1, com1 = vdd and com2 = vdd/2 or a,#$40 ; pb7 is already an output push pull, ld pbdr,a ; pb6 is already an output open drain ;### end of actions for oc2_2 segment ### jrt out oc1 clr x ld a,lcdcr and a,#$02 tnz a jreq no_incx inc x no_incx ld a,(seg1,x) ; in this subdivision oc1_i ld padr,a ; one of the segment i: 1 if segment is on. otherwise 0. tnz x jrne oc1_2 ;### actions for oc1_1 segment ### ld a,pbdr and a,#$7f ld pbdr,a ld a,pbor ; in oc1_1, com1 = 0 and com2 = vdd/2 or a,#$80 ; so pb7 is an output push pull, and a,#$bf ; and pb6 an output open drain ld pbor,a ;### end of actions for oc1_1 segment ### jrt out ;### actions for oc1_2 segment ### oc1_2 ld a,pbdr and a,#$bf ld pbdr,a ld a,pbor ; in oc1_2, com1 = vdd/2 and com2 = 0 and a,#$7f ; so pb7 is an output open drain, or a,#$40 ; and pb6 an output push pull ld pbor,a ;### end of actions for oc1_2 segment ### out ld a,lcdcr ;|\ inc a ;| cp a,#$04 ; 2bits counter lcdcr[1..0]. used to know jrc end_inc ; which subdivision is to be applied next
17/20 st7 software lcd driver clr a ;| end_inc ld lcdcr,a ;|/ ; ######################end of user program############################### ld a,pbor ;|\ and a,#$df ;| ld pbor,a ld a,pbddr and a,#$df ; configure pb5 as a pull-up with interrupt again ld pbddr,a ld a,pbor ;| or a,#$20 ;| ld pbor,a ;|/ no_lcd iret ;***********lcd start program********************************* .start_lcd clr a ; init lcdcr, lcd control register ld lcdcr,a ; >port a initialisation for lcd ld a,#$ff ; configure the whole porta as output push-pull ld paddr,a ; they will be dedicated to the segment outputs ld paor,a ; >port b initialisation for lcd ld a,pbddr ;|\ or a,#$c0 ;| and a,#$df ; configure pb6 & pb7 as output push-pull ld pbddr,a ; they will be dedicated to the backplane outputs ld a,pbor ; configure pb5 as a pull-up with interrupt. as a result and a,#$df ; the external capacitance will discharge, leading to ld pbor,a ; the first i/o interrupt for lcd. ld a,pbor ; or a,#$e0 ;>>warning<<: this configuration implies that pb[7..5] ld pbor,a ; and pbx were in their reset state (input pull_down no ; interrupt)when calling this routine. if this is not the ; case check carefully if no forbidden i/o pin ; state switch is applied (see the st72251 databook). ; if necessary, change this configuration. ;| ret ;|/
18/20 st7 software lcd driver ;***************************************************************** ; ports drivers ;***************************************************************** .port_init ;***********port a initialisation ************ ;port a is dedicated to lcd segment signals. before starting to drive the lcd ;(before calling start_lcd port a pins must remain unsupplied ;(port pins configured as either input or open drain ). as a result the pin reset ;states (inputs)don't need to be changed. ;***********port b initialisation ************ ld a,#$20 ; configure pb5 as output push pull initially ld pbddr,a ; in order to get the capacitor charged when starting ld pbdr,a ; the lcd. ; as long as the lcd is not used, pb7 and pb6, used for ; the lcd backplane signal, can remain in their reset ; state for the same reason as for the port b pins. ; warning: overwrite the pb4..0 pins configuration.!!! ; you perhaps need to modify this to include the ; configuration of pb4..0. don't forget to avoid ; forbidden i/o configuration switches (see data sheet)! ret end figure 8. calibrating the rc circuit pa5 st7 rc internal pull-up rint 40k 19/20 st7 software lcd driver figure 9. lcd timing vdd 0 seg2 off seg1 off case 3 vdd 0 seg2 on seg1 off case 1 interrupt oc1 oc1 oc1 oc2 oc2 oc2 segment com1 com2 vdd vdd/2 0 vdd vdd/2 0 vdd 0 seg2 on seg1 on case 2 vdd 0 seg2 off seg1 on case 4 12341
20/20 st7 software lcd driver the present note which is for guidance only aims at providing customers with information regarding their products in order for them to save time. as a result, stmicroelectronics shall not be held liable for any direct, indirect or consequential damages with respect to any claims arising from the content of such a note and/or the use made by customers of the information contained herein in connexion with their products. information furnished is believed to be accurate and reliable. however, stmicroelectronics assumes no responsibility for the co nsequences of use of such information nor for any infringement of patents or other rights of third parties which may result from its use. no license is granted by implication or otherwise under any patent or patent rights of stmicroelectronics. specifications mentioned in this publicati on are subject to change without notice. this publication supersedes and replaces all information previously supplied. stmicroelectronics prod ucts are not authorized for use as critical components in life support devices or systems without the express written approval of stmicroele ctronics. the st logo is a registered trademark of stmicroelectronics ? 1998 stmicroelectronics - all rights reserved. purchase of i 2 c components by stmicroelectronics conveys a license under the philips i 2 c patent. rights to use these components in an i 2 c system is granted provided that the system conforms to the i 2 c standard specification as defined by philips. stmicroelectronics group of companies australia - brazil - canada - china - france - germany - italy - japan - korea - malaysia - malta - mexico - morocco - the neth erlands - singapore - spain - sweden - switzerland - taiwan - thailand - united kingdom - u.s.a. http://www.st.com


▲Up To Search▲   

 
Price & Availability of AN1048

All Rights Reserved © IC-ON-LINE 2003 - 2022  

[Add Bookmark] [Contact Us] [Link exchange] [Privacy policy]
Mirror Sites :  [www.datasheet.hk]   [www.maxim4u.com]  [www.ic-on-line.cn] [www.ic-on-line.com] [www.ic-on-line.net] [www.alldatasheet.com.cn] [www.gdcy.com]  [www.gdcy.net]


 . . . . .
  We use cookies to deliver the best possible web experience and assist with our advertising efforts. By continuing to use this site, you consent to the use of cookies. For more information on cookies, please take a look at our Privacy Policy. X